package com.aaron.crowd.mvc.handler;

import com.aaron.crowd.constant.CrowdConstant;
import com.aaron.crowd.entity.Admin;
import com.aaron.crowd.service.api.AdminService;
import com.aaron.crowd.util.CrowdUtil;
import com.github.pagehelper.PageInfo;
import com.sun.org.apache.xpath.internal.operations.Mod;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.logging.Logger;

/**
 * @BelongsProject: atcrowdfuncding
 * @BelongsPackage: com.aaron.crowd.mvc.handler
 * @author: Andy
 * @date: 2021.3.29 15:41
 * @Description: 登录控制器
 * @since JDK 1.8
 */

@Controller
public class AdminHandler {
    @Autowired
    private AdminService adminService;

    /**
     * 处理进行处理时的请求
     * @param admin
     * @return
     */
    @RequestMapping("admin/save.html")
    public String saveAdmin(Admin admin){
        adminService.saveAdmin(admin);
        return "redirect:/admin/get/page.html?pageNum="+Integer.MAX_VALUE;
    }

    /**
     * 执行单条删除
     * @param adminId  用户的ID
     * @return
     */
    @RequestMapping("admin/page/remove/{adminId}/{pageNum}/{keyword}.html")
    public String remove(
            @PathVariable("adminId") Integer adminId,
            @PathVariable("pageNum") Integer pageNum,
            @PathVariable("keyword") String keyword
    ){
        // 执行删除操作
        adminService.remove(adminId);

        // 重定向到 admin-page页面
        return "redirect:/admin/get/page.html?pageNum="+pageNum+"&keyword="+keyword;
    }

    /**
     * 处理登录请求
     * @param loginAcct 账号
     * @param userPswd  密码
     * @param session   Session
     * @return  进入主菜单
     */
    @RequestMapping("admin/do/login.html")
    public String doLogin(
            @RequestParam("loginAcct") String loginAcct,
            @RequestParam("userPswd") String userPswd,
            HttpSession session
    ){
        System.err.println("执行登录");
        // 调用Service方法执行登录检查
            // 这个方法如果能够返回对象，证明登录成功，如果没有返回对象，证明登录失败。
        Admin admin = adminService.getAdminByLoginAcct(loginAcct,userPswd);
        //  将登陆成功返回的Admin对象存入Session域中
        session.setAttribute(CrowdConstant.ATTR_NAME_LOGIN_ADMIN,admin);
        //重定向到登录完成后的主页面（重定向防止重复提交表单，增加不必要的数据库访问）
        return "redirect:/admin/main/page.html";
    }

    /**
     * 处理退出请求
     * @param session Session
     * @return  返回到登录页面，依然重定向
     */
    @RequestMapping("admin/do/logout.html")
    public String doLogout(HttpSession session){
        // 强制 Session 失效
        session.invalidate();
        return "redirect:/admin/to/login/page.html";
    }

    /**
     * 分页显示所有用户信息
     * @param keyword   条件
     * @param pageNum   起始页
     * @param pageSize  每页显示页数
     * @param modelMap  用于向前端传递数据
     * @return  返回要访问的JSP页面
     */
    @RequestMapping("/admin/get/page.html")
    public String getPageInfo(
            // 如果 keyword 没有提供（首次点击）就使用空字符串
            @RequestParam(value = "keyword",defaultValue = "") String keyword,
            @RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize",defaultValue = "5") Integer pageSize,
            ModelMap modelMap
    ){
        PageInfo<Admin> pageInfo = adminService.getPageInfo(keyword, pageNum, pageSize);
        System.err.println(pageInfo);

        modelMap.addAttribute(CrowdConstant.ATTR_NAME_PAGE_INFO,pageInfo);
        return "admin-page";
    }
}
